package com.dys.test11;

/**
 * @className: com.dys.test11.Test
 * @description: com.dys.test11
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/19 下午9:10
 */
public class Test {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        // 定义一个任务对象
        // BuyTicketThread bt = new BuyTicketThread();
        // // 窗口1
        // Thread t1 = new Thread(bt, "窗口1: ");
        // t1.start();
        // // 窗口2
        // Thread t2 = new Thread(bt, "窗口2: ");
        // t2.start();
        // // 窗口3
        // Thread t3 = new Thread(bt, "窗口3: ");
        // t3.start();

        BuyTicketThread2 t1 = new BuyTicketThread2("窗口1");
        t1.start();
        BuyTicketThread2 t2 = new BuyTicketThread2("窗口2");
        t2.start();
        BuyTicketThread2 t3 = new BuyTicketThread2("窗口3");
        t3.start();
    }
}

/**
 * 继承的类需要使用类名.class，而不能使用this
 */
class BuyTicketThread2 extends Thread {
    public BuyTicketThread2(String name) {
        super(name);
    }

    /**
     * 火车票的数量,多个人同时强
     */
    static int ticketNum = 10;

    // 每个窗口都有一个线程对象,每个窗口有100个人在抢票
    @Override
    public void run() {
        // 其它逻辑
        for (int i = 1; i <= 100; i++) {
            // 把具有安全隐患的代码锁住即可，如果锁多了，就会效率低
            synchronized (BuyTicketThread2.class) {
                if (ticketNum > 0) {
                    System.out.println("我在" + Thread.currentThread().getName() + "，购买了从【深圳->贵阳】的第" + ticketNum-- + "张票");
                }
            }
        }
        // 其它逻辑
    }
}
